#ifndef VISITOR_H
#define VISITOR_H

#include "expr.h"
#include "stmt.h"

class Visitor{
public:
    virtual void visitExpr(Expr& expr);
    virtual void visitVariableExpr(VariableExpr& expr);
    virtual void visitFunctionNameExpr(FunctionNameExpr& expr);
    virtual void visitConstantExpr(ConstantExpr& expr);
    virtual void visitBinaryExpr(BinaryExpr& expr);

    virtual void visitStatement(Statement& stmt);
    virtual void visitBlock(Block& blk);
    virtual void visitVariableDeclare(VariableDeclareStatement& stmt);
    virtual void visitAssignment(AssignmentStatement& stmt);
    virtual void visitParameterList(ParameterListStatement& stmt);
    virtual void visitVariableList(VariableListStatement& stmt);
    virtual void visitExprList(ExprListStatement& stmt);
    virtual void visitFunctionDef(FunctionDefStatement& stmt);
    virtual void visitFunctionCall(FunctionCallStatement& stmt);

    virtual void visitWhileStatement(WhileStatement& stmt);
    virtual void visitIfStatement(IfStatement& stmt);
};

#endif

